﻿using System.Collections.Generic;
using Vra.Entities;

namespace Vra.DataAccess
{
	/// <summary>
	/// Класс содержит общую для всех CRUD операций логику
	/// </summary>
	/// <typeparam name="T"></typeparam>
	internal abstract class BaseEntityDao<T> : BaseDao, IBaseEntityDao<T> where T : BaseEntity
	{
		/// <summary>
		/// Свойство хранит имя таблицы
		/// </summary>
		protected readonly string TableName;

		/// <summary>
		/// Создает новый экземпляр <seealso cref="BaseEntityDao{T}"/>
		/// </summary>
		protected BaseEntityDao()
		{
			TableName = typeof (T).Name;
		}

		/// <summary>
		/// Возвращает SELECT запрос
		/// </summary>
		/// <returns></returns>
		protected string GetSelectQuery()
		{
			return string.Format("select * from {0}", TableName);
		}

		public abstract IList<T> Load();

		public abstract void Add(T item);

		public abstract void Update(T item);

		public abstract void Delete(int id);
	}
}
